/*
 *  Copyright (c) 2020-2022 ForteScarlet <ForteScarlet@163.com>
 *
 *  本文件是 simply-robot (或称 simple-robot 3.x 、simbot 3.x ) 的一部分。
 *
 *  simply-robot 是自由软件：你可以再分发之和/或依照由自由软件基金会发布的 GNU 通用公共许可证修改之，无论是版本 3 许可证，还是（按你的决定）任何以后版都可以。
 *
 *  发布 simply-robot 是希望它能有用，但是并无保障;甚至连可销售和符合某个特定的目的都不保证。请参看 GNU 通用公共许可证，了解详情。
 *
 *  你应该随程序获得一份 GNU 通用公共许可证的复本。如果没有，请看:
 *  https://www.gnu.org/licenses
 *  https://www.gnu.org/licenses/gpl-3.0-standalone.html
 *  https://www.gnu.org/licenses/lgpl-3.0-standalone.html
 *
 */
package love.forte.simbot.logger.color

/**
 * @author ForteScarlet <[163邮箱地址]ForteScarlet@163.com>
 * @since JDK1.8
 */
public interface Color {
    public val colorIndex: Int
    public val isBackGround: Boolean get() = this is BackGroundColor
    public val isFont: Boolean get() = this is FontColor
    public val prefix: String
    public val suffix: String
}

public fun String.decorativeColor(color: Color): String {
    return "${color.prefix}$this${color.suffix}"
}

public fun StringBuilder.appendColor(color: Color, value: String): StringBuilder {
    return append(color.prefix).append(value).append(color.suffix)
}
public fun StringBuilder.appendColor(color: Color, value: Char): StringBuilder {
    return append(color.prefix).append(value).append(color.suffix)
}

public fun StringBuilder.appendColorPrefix(color: Color): StringBuilder {
    return append(color.prefix)
}

public fun StringBuilder.appendColorSuffix(color: Color): StringBuilder {
    return append(color.suffix)
}